home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 11 / FM Towns Free Software Collection 11.iso / t_os / shell / tokei4 / src / sub.c < prev    next >
C/C++ Source or Header  |  1995-04-07  |  19KB  |  680 lines

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <winb.h>
  5. #include <te.h>
  6. #include <fntb.h>
  7. #include <gui.h>
  8. #include <egb.h>
  9. #include <guidbg.h>
  10.  
  11. int    iconBaseHyperID = -1 ;
  12. int    iconBaseWindowID = -1 ;
  13. int    iconMenuID[3] = -1 ;
  14. int    iconMenuItemID[11] = -1 ;
  15. int    dialogBaseHyperID = -1 ;
  16. int    aboutDialogID = -1 ;
  17. int    aboutMessageID[4] = -1 ;
  18. int    aboutDButtonID = -1 ;
  19. int    timeSetBaseDialogID = -1 ;
  20. int    timeSetDButtonID[8] = -1 ;
  21. int    timeSetMessageID[11] = -1 ;
  22. int    timeSetScrollbarID = -1 ;
  23.  
  24. #include <eintm.h>
  25. #include <time.h>
  26. #include <mos.h>
  27. #include <wgb.h>
  28. #include <smsg.h>
  29.  
  30. extern char    *guiEgbPtr ;            /*    EGB のワークアドレス    */
  31.  
  32. #define T4GDATASIZE (7480)
  33. // #define DEBUG
  34.  
  35. typedef    struct {
  36.     _Far char *pixel;
  37.     short    x1,y1;
  38.     short    x2,y2;
  39.     } EGB_BLOCK;
  40.  
  41. int t4QuitFuncRet = ILLEGAL_FUNCTION  ;
  42. int t4UpdateFlag = -1 ; // -1:アップデート不可 0:アップデート可 1:一時強制全アップデート
  43. int    t4old_sec = -1;
  44. int t4old_min = -1;
  45. int t4old_hou = -1;
  46. int t4Hour[3] =   {13,16, 1} ;    //タイマー時刻(時)
  47. int t4Minute[3] = {54,59,30} ;    //タイマー時刻(分)
  48. int t4HourB[3];                //タイマー時刻(時)(設定用バッファ)
  49. int t4MinuteB[3];            //タイマー時刻(分)(設定用バッファ)
  50. int t4Switch[5];            //スイッチの状態 0:解除 1:設定
  51. char t4GBuffer[T4GDATASIZE];//グラフィックデータバッファ
  52. int t4x,t4y;                //座標
  53. int t4BackColor ;            //塗り潰し用の色
  54. int t4Poff ;
  55. int t4Ps ;
  56. int t4Noff ;
  57. int t4Ns ;
  58. int t4ClipFlag = 0;            //クリップフラグ 他のダイアログが出ているとき、1
  59. int t4TimeSetFlag = 0;        //0~5
  60. char t4MenuMessage[3][11] ;    //メニューメッセージバッファ
  61. int t4SMSGFlag = 0 ;        //0:常駐していない 1:常駐している
  62. int t4Beep[5];                //Beep Flag -1/0
  63.  
  64. char sBufA[] = "127000000 bytes free\0\0";    //about dialog
  65. char sBuf[] = "00\0\0";                        //number(scrollbar's)
  66. char sBufS[6][7] ;                            //time set draw button number
  67.  
  68. EGB_BLOCK t4put;
  69.  
  70. void t4IdleTask(void);
  71. void t4PreScreenChangeFunc(void);
  72. void t4PostScreenChangeFunc(void);
  73. void numPut(int,int);
  74. void beep(int);
  75. void messageSet( int , char * );
  76.  
  77. //===========================================================================
  78. void t4IdleTask(void)
  79. {
  80.     static int pflag = 0;
  81.  
  82.     if(t4UpdateFlag == -1){
  83.         #ifdef DEBUG
  84.         printf("時計ー:アップデート禁止っす\n");
  85.         #endif
  86.         return;
  87.     }
  88.     if(t4UpdateFlag == 1){
  89.         #ifdef DEBUG
  90.         printf("時計ー:強制アップデート開始\n");
  91.         #endif
  92.         t4UpdateFlag = 0;
  93.         t4old_sec = -1;
  94.         t4old_min = -1;
  95.         t4old_hou = -1;
  96.     }
  97.  
  98.     time_t        ct = time(NULL);
  99.     struct tm  *lt = localtime(&ct);
  100.  
  101.     // まだ一秒経っていないなら終了
  102.     if ( lt->tm_sec == t4old_sec ){
  103.         return;
  104.     }
  105.     t4old_sec = lt->tm_sec;
  106.     pflag = 1 - pflag;
  107.  
  108.     //ポイント描画
  109.     //クリップをかける
  110.     WINCLIP *clip;
  111.     WINCLIP *clipBuffer;
  112.  
  113.     if(t4ClipFlag != 0){
  114.         #ifdef DEBUG
  115.         printf("時計ー:クリップ設定\n");
  116.         #endif
  117.         FRAME fr;
  118.         fr.lupx = t4x;
  119.         fr.lupy = t4y;
  120.         fr.rdwx = t4x + 58;
  121.         fr.rdwy = t4y + 15;
  122.         clip = WIN_clipWindow(iconBaseWindowID,
  123.                                         WIN_getClipMemory(&fr,NULL),TRUE);
  124.         WIN_pushClip(clip, &clipBuffer) ;
  125.     }
  126.  
  127.     EGB_color( guiEgbPtr , 0 , t4BackColor );    //    前景色
  128.     EGB_color( guiEgbPtr , 2 , t4BackColor );    //    面塗り色
  129.     EGB_paintMode( guiEgbPtr , 2+32 );    //    ベタ塗り
  130.  
  131.     t4put.pixel = (char *)&t4GBuffer[t4Poff + pflag * t4Ps] ;
  132.     t4put.x1 = t4x + 26;
  133.     t4put.y1 = t4y + 3 ;
  134.     t4put.x2 = t4put.x1 + 5 ;
  135.     t4put.y2 = t4put.y1 + 9 ;
  136.     // 現在のマウスカーソルの位置を読む
  137.     int    i;
  138.     Rect    rmos;
  139.     MOS_rdpos( &i,(int *)&rmos.left, (int *)&rmos.up );
  140.     rmos.right= rmos.left + 31;
  141.     rmos.down = rmos.up   + 31;
  142.     if ( SectRect( &rmos, (Rect *)&t4put.x1 ) ){
  143.         MG_mosDisp(2);
  144.         EGB_writeMode( guiEgbPtr , 0 );    //    0=PSET
  145.         WGB_rectangle( guiEgbPtr , (char *)&t4put.x1 );
  146.         EGB_writeMode( guiEgbPtr , 6 );    //    6=MATTE
  147.         WGB_putBlock( guiEgbPtr, 3, (char *)&t4put ) ;
  148.         MG_mosDisp(3);
  149.     } else {
  150.         EGB_writeMode( guiEgbPtr , 0 );    //    0=PSET
  151.         WGB_rectangle( guiEgbPtr , (char *)&t4put.x1 );
  152.         EGB_writeMode( guiEgbPtr , 6 );    //    6=MATTE
  153.         WGB_putBlock( guiEgbPtr, 3, (char *)&t4put ) ;
  154.     }
  155.     // 一分経っていたら描画
  156.     if ( lt->tm_min != t4old_min ){
  157.         #ifdef DEBUG
  158.         printf("時計ー:分表示\n");
  159.         #endif
  160.         t4old_min = lt->tm_min;
  161.         numPut(2 , t4old_min / 10);
  162.         numPut(3 , t4old_min % 10);
  163.         for(i=0;i<3;i++){
  164.             if(t4Switch[i]==1)
  165.                 if((t4old_min==t4Minute[i]) && (lt->tm_hour==t4Hour[i]) ){
  166.                     if(t4Beep[i]!=t4old_min){
  167.                         t4Beep[i] = t4old_min ;
  168.                         #ifdef DEBUG
  169.                         printf("時計ー:タイマー%d(%d:%d)のチャイムです\n",
  170.                                                 i+1,t4Hour[i],t4Minute[i]);
  171.                         #endif
  172.                         beep(5);
  173.                     }
  174.                 } else t4Beep[i] = -1 ;
  175.         }
  176.         if((t4old_min==0) || (t4old_min==30))
  177.             if((t4Switch[4]==1) && (t4Beep[4]!=t4old_min)){
  178.                 #ifdef DEBUG
  179.                 printf("時計ー:%d分のチャイムです\n",t4old_min);
  180.                 #endif
  181.                 beep(2);
  182.                 t4Beep[4]=t4old_min;
  183.             }
  184.     }
  185.     // 一時間経っていたら描画
  186.     if ( lt->tm_hour != t4old_hou ){
  187.         #ifdef DEBUG
  188.         printf("時計ー:時表示\n");
  189.         #endif
  190.         t4old_hou = lt->tm_hour;
  191.         numPut(0 , t4old_hou / 10);
  192.         numPut(1 , t4old_hou % 10);
  193.         if(t4old_min==0)
  194.             if((t4Switch[3]==1) && (t4Beep[3]!=t4old_hou)){
  195.                 #ifdef DEBUG
  196.                 printf("時計ー:%d時のチャイムです\n",t4old_hou);
  197.                 #endif
  198.                 beep(3);
  199.                 t4Beep[3]=t4old_hou;
  200.             }
  201.     }
  202.     //クリップ解除
  203.     if(t4ClipFlag != 0){
  204.         WIN_popClip(clipBuffer);
  205.     }
  206.     return;
  207. }
  208.  
  209. //===========================================================================
  210. void beep( num )
  211. int num;
  212. {
  213.     //アラームを鳴らす
  214.     int i;
  215.     for(i=0;i<num;i++){
  216.         int j,ptr;
  217.         j = MG_PushPtr(((i%2)==0) ? 24 : 121 ,&ptr);
  218.         if(j==0){
  219.             #ifdef DEBUG
  220.             printf("時計ー:音あり\n");
  221.             #endif
  222.             if(t4SMSGFlag==1) SMSG_play(7,0);
  223.             MMI_WaitLoop(40);
  224.             MG_PopPtr( ptr );
  225.         } else { ;
  226.             #ifdef DEBUG
  227.             printf("時計ー:音なし\n");
  228.             #endif
  229.         }
  230.         
  231.     }
  232.  
  233.     return ;
  234. }
  235.  
  236. //===========================================================================
  237. void numPut( id, num)
  238. int id;
  239. int num;
  240. {
  241.     t4put.pixel = (char *)&t4GBuffer[t4Noff + num * t4Ns] ;
  242.     t4put.x1 = t4x + id * 13;
  243.     t4put.y1 = t4y ;
  244.     if(id>1) t4put.x1 = t4put.x1 + 7;
  245.     t4put.x2 = t4put.x1 + 11 ;
  246.     t4put.y2 = t4put.y1 + 15 ;
  247.  
  248.     int btn;
  249.     Rect rmos;
  250.  
  251.     MOS_rdpos( &btn,(int *)&rmos.left, (int *)&rmos.up );
  252.     rmos.right= rmos.left + 31;
  253.     rmos.down = rmos.up   + 31;
  254.     if ( SectRect( &rmos, (Rect *)&t4put.x1 ) ){
  255.         MG_mosDisp(2);
  256.         EGB_writeMode( guiEgbPtr , 0 );    //    0=PSET
  257.         WGB_rectangle( guiEgbPtr , (char *)&t4put.x1 );
  258.         EGB_writeMode( guiEgbPtr , 6 );    //    6=MATTE
  259.         WGB_putBlock( guiEgbPtr, 3, (char *)&t4put ) ;
  260.         MG_mosDisp(3);
  261.     } else {
  262.         EGB_writeMode( guiEgbPtr , 0 );    //    0=PSET
  263.         WGB_rectangle( guiEgbPtr , (char *)&t4put.x1 );
  264.         EGB_writeMode( guiEgbPtr , 6 );    //    6=MATTE
  265.         WGB_putBlock( guiEgbPtr, 3, (char *)&t4put ) ;
  266.     }
  267.  
  268.     return;
  269. }
  270.  
  271. //===========================================================================
  272. /*    initDataICONGUI:iconBaseWindowID:MJ_WINDOWL40の呼び出し関数    */
  273. int    windowFunc(kobj, messId, argc, pev, trigger)
  274. int        kobj ;
  275. int        messId ;
  276. int        argc ;
  277. EVENT    *pev ;
  278. int        trigger ;
  279. {
  280.     if(messId==MM_MOVE){
  281.         #ifdef DEBUG
  282.         printf("時計ー(Window):MM_MOVE\n");
  283.         #endif
  284.         FRAME fr;
  285.         EIN_getObjectFrame(kobj,&fr);
  286.         t4x = fr.lupx + 6 ;
  287.         t4y = fr.lupy + 4 ;
  288.     } else if((messId==MM_SHOW) || (messId==MM_UPDATE)){
  289.         #ifdef DEBUG
  290.         printf("時計ー(Window):MM_SHOW||MM_UPDATE\n");
  291.         #endif
  292.         t4UpdateFlag = 1;
  293.     } else return -1 ;    // -1で抜けると、window本来の動きをする
  294.     return NOERR ;
  295. }
  296.  
  297. //===========================================================================
  298. /*    initDataICONGUI:iconMenuItemID[1]:MJ_MITEML40の呼び出し関数    */
  299. int    aboutFunc(kobj, messId, argc, pev, trigger)
  300. int        kobj ;
  301. int        messId ;
  302. int        argc ;
  303. EVENT    *pev ;
  304. int        trigger ;
  305. {
  306.     //aboutダイアログを出す
  307.     sprintf(sBufA,"%d bytes free",EIN_checkMem());
  308.     MMI_SendMessage( aboutMessageID[2],MM_SETMSG,1, sBufA);
  309.     //アイコン関係を選択不可にする
  310.     MMI_SendMessage(iconMenuID[0],MM_ENABLE,1,FALSE);
  311.     MMI_SendMessage(iconMenuID[0],MM_SHOW,0);
  312.     //aboutダイアログを繋いで、表示
  313.     MMI_SendMessage(aboutDialogID,MM_ATTACH,1,dialogBaseHyperID);
  314.     MMI_SendMessage(aboutDialogID,MM_SHOW,0);
  315.     t4UpdateFlag = 1;
  316.     t4ClipFlag = 1 ;
  317.     return NOERR ;
  318. }
  319.  
  320. //===========================================================================
  321. /*    initDataICONGUI:iconMenuItemID[6]:MJ_MITEML40の呼び出し関数    */
  322. /*    initDataICONGUI:iconMenuItemID[7]:MJ_MITEML40の呼び出し関数    */
  323. /*    initDataICONGUI:iconMenuItemID[8]:MJ_MITEML40の呼び出し関数    */
  324. /*    initDataICONGUI:iconMenuItemID[9]:MJ_MITEML40の呼び出し関数    */
  325. /*    initDataICONGUI:iconMenuItemID[10]:MJ_MITEML40の呼び出し関数    */
  326. int    switchSetFunc(kobj, messId, argc, pev, trigger)
  327. int        kobj ;
  328. int        messId ;
  329. int        argc ;
  330. EVENT    *pev ;
  331. int        trigger ;
  332. {
  333.     int i=6;
  334.     while(iconMenuItemID[i] != kobj) i++;
  335.     i = i-6;
  336.     if(t4Switch[i] == 1){
  337.         //リセット
  338.         t4Switch[i] = 0;
  339.         MTL_resetAtrObj( kobj , ~MS_CHECKL40 );
  340.         #ifdef DEBUG
  341.         printf("時計ー:タイマー%d(%2d時 %2d分)解除\n",
  342.                                                 i+1,t4Hour[i],t4Minute[i]);
  343.         #endif
  344.     } else {
  345.         //セット
  346.         t4Switch[i] = 1;
  347.         MTL_setAtrObj( kobj , MS_CHECKL40 );
  348.         #ifdef DEBUG
  349.         printf("時計ー:タイマー%d(%2d時 %2d分)設定\n",
  350.                                                 i+1,t4Hour[i],t4Minute[i]);
  351.         #endif
  352.     }
  353.     t4UpdateFlag = 1;
  354.     t4ClipFlag = 0;
  355.  
  356.     return NOERR ;
  357. }
  358.  
  359. HYPER hypDB[6];
  360.  
  361. //===========================================================================
  362. /*    initDataICONGUI:iconMenuItemID[3]:MJ_MITEML40の呼び出し関数    */
  363. int    timerSetFunc(kobj, messId, argc, pev, trigger)
  364. int        kobj ;
  365. int        messId ;
  366. int        argc ;
  367. EVENT    *pev ;
  368. int        trigger ;
  369. {
  370.     //時刻セットダイアログを出す
  371.     //アイコン関係を選択不可にする
  372.     MMI_SendMessage(iconMenuID[0],MM_ENABLE,1,FALSE);
  373.     MMI_SendMessage(iconMenuID[0],MM_SHOW,0);
  374.     //時刻セットダイアログを繋いで、表示
  375.     MMI_SendMessage(timeSetBaseDialogID,MM_ATTACH,1,dialogBaseHyperID);
  376.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_GETHYPER,1,
  377.                                                     &(hypDB[t4TimeSetFlag]));
  378.     hypDB[t4TimeSetFlag].atrm =
  379.                 ((hypDB[t4TimeSetFlag].atrm & ~MS_DFRAMEL40 ) | MS_DFRAMEL40 );
  380.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_SETHYPER,1,
  381.                                                         &hypDB[t4TimeSetFlag]);
  382.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_ENABLE ,1,FALSE);
  383.     //スクロールバーに値をセット
  384.     int i,j,k;
  385.     if((t4TimeSetFlag%2)==1){
  386.         i = 59;
  387.         j = 5;
  388.         k = t4Minute[t4TimeSetFlag/2];
  389.     } else {
  390.         i = 23;
  391.         j = 2;
  392.         k = t4Hour[t4TimeSetFlag/2];
  393.     }
  394.     MMI_SendMessage( timeSetScrollbarID , MM_SETSCROLL ,5,
  395.                                     k , 0, i, 1, j );
  396.     MMI_SendMessage( timeSetScrollbarID , MM_ENABLE ,1,TRUE);
  397.  
  398.     //現在のタイマーの値を複写する
  399.     for(i=0;i<3;i++){
  400.         t4HourB[i] = t4Hour[i];
  401.         t4MinuteB[i] = t4Minute[i];
  402.         #ifdef DEBUG
  403.         printf("時計ー:タイマー%d  %2d時 %2d分.\n",
  404.                                                 i+1,t4Hour[i],t4Minute[i]);
  405.         #endif
  406.     }
  407.  
  408.     //タイマー時刻を、ボタンに書き込む
  409.     for(i=0;i<3;i++){
  410.         sprintf(&(sBufS[i*2][0]),"%2d時",t4Hour[i]);
  411.         sprintf(&(sBufS[i*2+1][0]),"%2d分",t4Minute[i]);
  412.         MMI_SendMessage(timeSetMessageID[i*2+1],MM_SETMSG,1,
  413.                                             &(sBufS[i*2][0]));
  414.         MMI_SendMessage(timeSetMessageID[i*2+2],MM_SETMSG,1,
  415.                                             &(sBufS[i*2+1][0]));
  416.     }
  417.  
  418.     //全表示
  419.     MMI_SendMessage( timeSetBaseDialogID , MM_SHOW , 0 );
  420.  
  421.     t4ClipFlag = 1 ;
  422.     t4UpdateFlag = 1;
  423.     return NOERR ;
  424. }
  425.  
  426. //===========================================================================
  427. /*    initDataICONGUI:iconMenuItemID[5]:MJ_MITEML40の呼び出し関数    */
  428. int    quitFunc(kobj, messId, argc, pev, trigger)
  429. int        kobj ;
  430. int        messId ;
  431. int        argc ;
  432. EVENT    *pev ;
  433. int        trigger ;
  434. {
  435.     MMI_SetHaltFlag( TRUE );
  436.     t4UpdateFlag = -1;
  437.     t4QuitFuncRet = NOERR;
  438.     t4ClipFlag = 0;
  439.     return NOERR ;
  440. }
  441.  
  442. //===========================================================================
  443. /*    initDataABOUTGUI:aboutDButtonID:MJ_DBUTTONL40の呼び出し関数    */
  444. int    aboutQuitFunc(kobj, messId, argc, pev, trigger)
  445. int        kobj ;
  446. int        messId ;
  447. int        argc ;
  448. EVENT    *pev ;
  449. int        trigger ;
  450. {
  451.     //aboutダイアログを消去して、はずす
  452.     MMI_SendMessage(aboutDialogID,MM_ERASE,0);
  453.     MMI_SendMessage(aboutDialogID,MM_DETACH,0);
  454.     //アイコン関係を選択可にする
  455.     MMI_SendMessage(iconMenuID[0],MM_ENABLE,1,TRUE);
  456.     MMI_SendMessage(iconMenuID[0],MM_SHOW,0);
  457.     t4ClipFlag = 0 ;
  458.     return NOERR ;
  459. }
  460.  
  461. //===========================================================================
  462. /*    initDataT_SETGUI:timeSetDButtonID[0]:MJ_DBUTTONL40の呼び出し関数    */
  463. /*    initDataT_SETGUI:timeSetDButtonID[1]:MJ_DBUTTONL40の呼び出し関数    */
  464. /*    initDataT_SETGUI:timeSetDButtonID[2]:MJ_DBUTTONL40の呼び出し関数    */
  465. /*    initDataT_SETGUI:timeSetDButtonID[3]:MJ_DBUTTONL40の呼び出し関数    */
  466. /*    initDataT_SETGUI:timeSetDButtonID[4]:MJ_DBUTTONL40の呼び出し関数    */
  467. /*    initDataT_SETGUI:timeSetDButtonID[5]:MJ_DBUTTONL40の呼び出し関数    */
  468. int    timeSetButtonFunc(kobj, messId, argc, pev, trigger)
  469. int        kobj ;
  470. int        messId ;
  471. int        argc ;
  472. EVENT    *pev ;
  473. int        trigger ;
  474. {
  475.     int i=0;
  476.     while(timeSetDButtonID[i]!=kobj) i++;
  477.  
  478.     #ifdef DEBUG
  479.     printf("時計ー:現在%d -> 変更%d\n",t4TimeSetFlag,i);
  480.     #endif
  481.     //今、へっこんでいるを、元に戻して、選択可にする
  482.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_GETHYPER,1,
  483.                                                     &(hypDB[t4TimeSetFlag]));
  484.     hypDB[t4TimeSetFlag].atrm =
  485.              ((hypDB[t4TimeSetFlag].atrm & ~MS_DFRAMEL40 ) | MS_UFRAMEL40 );
  486.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_SETHYPER,1,
  487.                                                     &hypDB[t4TimeSetFlag]);
  488.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_ENABLE ,1,TRUE);
  489.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_ERASE,0);
  490.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_SHOW,0);
  491.     MMI_SendMessage(timeSetMessageID[t4TimeSetFlag+1],MM_SHOW,0);
  492.     t4TimeSetFlag = i;
  493.     //選択不可にして、へっこませる
  494.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_GETHYPER,1,
  495.                                                     &(hypDB[t4TimeSetFlag]));
  496.     hypDB[t4TimeSetFlag].atrm =
  497.                 ((hypDB[t4TimeSetFlag].atrm & ~MS_DFRAMEL40 ) | MS_DFRAMEL40 );
  498.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_SETHYPER,1,
  499.                                                         &hypDB[t4TimeSetFlag]);
  500.     MMI_SendMessage( timeSetDButtonID[i] , MM_ENABLE ,1,FALSE);
  501.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_ERASE,0);
  502.     MMI_SendMessage( timeSetDButtonID[t4TimeSetFlag] , MM_SHOW,0);
  503.     MMI_SendMessage(timeSetMessageID[t4TimeSetFlag+1],MM_SHOW,0);
  504.  
  505.     //分だったら最大値を59に、時だったら23に、設定。現在の値も設定。
  506.     int j,k,l;
  507.     if((i%2)==1){
  508.         j = 59 ;
  509.         k = 5 ;
  510.         l = t4MinuteB[i/2] ;
  511.     } else {
  512.         j = 23 ;
  513.         k = 2 ;
  514.         l = t4HourB[i/2] ;
  515.     }
  516.     sprintf(sBuf,"%d",j);
  517.     MMI_SendMessage( timeSetScrollbarID , MM_ERASE , 0);
  518.     MMI_SendMessage( timeSetScrollbarID , MM_ENABLE ,1,TRUE);
  519.     MMI_SendMessage( timeSetScrollbarID , MM_SETSCROLL ,5,
  520.                                         l , 0, j, 1, k );
  521.     messageSet(timeSetMessageID[8],sBuf);
  522.     MMI_SendMessage( timeSetScrollbarID , MM_SHOW ,0);
  523.  
  524.     return NOERR ;
  525. }
  526.  
  527. //===========================================================================
  528. /*    initDataT_SETGUI:timeSetDButtonID[6]:MJ_DBUTTONL40の呼び出し関数    */
  529. /*    initDataT_SETGUI:timeSetDButtonID[7]:MJ_DBUTTONL40の呼び出し関数    */
  530. int    timeSetFunc(kobj, messId, argc, pev, trigger)
  531. int        kobj ;
  532. int        messId ;
  533. int        argc ;
  534. EVENT    *pev ;
  535. int        trigger ;
  536. {
  537.     int i;
  538.     if(kobj==timeSetDButtonID[6]){
  539.         //今の設定を有効にして(本物の領域に複写して)、ダイアログを消す
  540.         //この時、メニューの数字も変えておく
  541.         for(i=0;i<3;i++){
  542.             t4Hour[i] = t4HourB[i];
  543.             t4Minute[i] = t4MinuteB[i];
  544.             sprintf(&(t4MenuMessage[i][0]),"%2d時 %2d分",
  545.                                                 t4Hour[i],t4Minute[i]);
  546.             MMI_SendMessage(iconMenuItemID[i+6],MM_SETMSG,1,
  547.                                                 &(t4MenuMessage[i][0]));
  548.         }
  549.     } else {
  550.         //今の設定は無効だから、そのままダイアログを消す
  551.         ;
  552.     }
  553.     t4Beep[0] = -1 ;
  554.     t4Beep[1] = -1 ;
  555.     t4Beep[2] = -1 ;
  556.     t4Beep[4] = t4old_min ;
  557.     t4Beep[3] = t4old_hou ;
  558.     //ダイアログを消す
  559.     MMI_SendMessage(timeSetBaseDialogID,MM_ERASE,0);
  560.     MMI_SendMessage(timeSetBaseDialogID,MM_DETACH,0);
  561.  
  562.     MMI_SendMessage(iconMenuID[0],MM_ENABLE,1,TRUE);
  563.     MMI_SendMessage(iconMenuID[0],MM_SHOW,0);
  564.     t4ClipFlag = 0 ;
  565.  
  566.     return NOERR ;
  567. }
  568.  
  569. //===========================================================================
  570. /*    initDataT_SETGUI:timeSetScrollbarID:MJ_SCRLL40の呼び出し関数    */
  571. int    timeSetScrollbarFunc(kobj, messId, argc, pev, trigger)
  572. int        kobj ;
  573. int        messId ;
  574. int        argc ;
  575. EVENT    *pev ;
  576. int        trigger ;
  577. {
  578.     int i,j,dummy;
  579.     //現在の数値を読み取って
  580.     MMI_SendMessage( kobj,MM_GETSCROLL,5, &i, &dummy, &j ,&dummy,&dummy );
  581.     //(仮の)時刻に設定する
  582.     if(j==23){
  583.         t4HourB[t4TimeSetFlag/2] = i ;
  584.         sprintf(&(sBufS[t4TimeSetFlag][0]),"%2d時",i);
  585.     } else {
  586.         t4MinuteB[t4TimeSetFlag/2] = i ;
  587.         sprintf(&(sBufS[t4TimeSetFlag][0]),"%2d分",i);
  588.     }
  589.     //message部品に設定して、再表示
  590.     messageSet(timeSetMessageID[t4TimeSetFlag+1],&(sBufS[t4TimeSetFlag][0]));
  591.  
  592.     return NOERR ;
  593. }
  594.  
  595. //===========================================================================
  596. /*    initDataICONGUI:iconMenuItemID[0]:MJ_MITEML40の呼び出し関数    */
  597. int    menuCallFunc(kobj, messId, argc, pev, trigger)
  598. int        kobj ;
  599. int        messId ;
  600. int        argc ;
  601. EVENT    *pev ;
  602. int        trigger ;
  603. {
  604.     #ifdef DEBUG
  605.     printf("時計ー(MenuItem):アップデート禁止\n");
  606.     #endif
  607.     t4UpdateFlag = -1;
  608.     return -1;
  609. //    return NOERR;
  610. }
  611.  
  612. //===========================================================================
  613. //メッセージ部品に文字を設定して、再表示
  614. void messageSet( id , s )
  615. int id;
  616. char *s;
  617. {
  618.     MMI_SendMessage( id , MM_SETMSG , 1 , s );
  619.     MMI_SendMessage( id , MM_SHOW , 0 );
  620. }
  621.  
  622. //===========================================================================
  623. void t4PreScreenChangeFunc(void)
  624. {
  625.     t4UpdateFlag = -1 ;
  626.     return;
  627. }
  628.  
  629. //===========================================================================
  630. void t4PostScreenChangeFunc(void)
  631. {
  632.     //現在のピクセルモードを調べる
  633.     int        modebuf[8];
  634.     // EGB 画面情報取得
  635.     EGB_getResolutionPage( 0, modebuf );
  636.  
  637.     int i;
  638.     i = t4Poff;
  639.  
  640.     if(modebuf[4]==4){                //16色モード
  641.         t4Poff = 128*10 ;
  642.         t4Ps   = 40 ;
  643.         t4Noff = 0 ;
  644.         t4Ns   = 128 ;
  645.         #ifdef DEBUG
  646.         printf("時計ー:16色モード\n");
  647.         #endif
  648.     } else if(modebuf[4]==8) {        //256色モード
  649.         t4Poff = 128*10+40*2+192*10 ;
  650.         t4Ps = 60 ;
  651.         t4Noff = 128*10+40*2 ;
  652.         t4Ns = 192 ;
  653.         #ifdef DEBUG
  654.         printf("時計ー:256色モード\n");
  655.         #endif
  656.     } else if(modebuf[4]==16) {        //32k色モード
  657.         t4Poff = 128*10+40*2+192*10+60*2+384*10 ;
  658.         t4Ps = 120 ;
  659.         t4Noff = 128*10+40*2+192*10+60*2 ;
  660.         t4Ns = 384 ;
  661.         #ifdef DEBUG
  662.         printf("時計ー:32768色モード\n");
  663.         #endif
  664.     } else {                        //非対応
  665.         t4Poff = 128*10 ;
  666.         t4Ps   = 40 ;
  667.         t4Noff = 0 ;
  668.         t4Ns   = 128 ;
  669.         #ifdef DEBUG
  670.         printf("時計ー:非対応画面モード(%d)\n",modebuf[4]);
  671.         #endif
  672.     }
  673.     //塗り潰し用の色
  674.     t4BackColor = MG_colorChange(1);
  675.  
  676.     t4UpdateFlag = 1 ;
  677.  
  678.     return;
  679. }
  680.